home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / doors_2 / pb_116.zip / SDK.ZIP / PB_SDK.H < prev    next >
C/C++ Source or Header  |  1991-09-21  |  34KB  |  851 lines

  1. /*╒═══════════════════════════════════════╤════════════════════════════════╕*/
  2. /*│   ProBoard Software Development Kit   │   C/C++ library declarations   │*/
  3. /*╞═══════════════════════════════════════╧════════════════════════════════╡*/
  4. /*│           Only functions in this header file are supported             │*/
  5. /*├────────────────────────────────────────────────────────────────────────┤*/
  6. /*│     !! ───────────>> Only use LARGE memory model <<──────────── !!     │*/
  7. /*└────────────────────────────────────────────────────────────────────────┘*/
  8.  
  9.  
  10. #ifdef __cplusplus
  11.  extern "C" {
  12. #endif
  13.  
  14. #define NULL 0L
  15. #define FAR far
  16. #define TRUE 1
  17. #define FALSE 0
  18.  
  19. typedef int           FILE;
  20. typedef unsigned      size_t;
  21. typedef long          clock_t;
  22. typedef long          time_t;
  23. typedef char         *va_list;
  24.  
  25. #define va_start(ap,parmn)  ((ap) = (va_list)&(parmn) + sizeof(parmn))
  26. #define va_arg(ap,type) (*((type *)(ap))++)
  27. #define va_end(ap)
  28.  
  29. struct find_t              /* used by dos_findfirst() & dos_findnext() */
  30.   {
  31.    char     reserved[21];      /* reserved by DOS                      */
  32.    char     attrib;            /* attribute found (FA_XXXX)            */
  33.    unsigned time,date;         /* file's last write                    */
  34.    unsigned long size;         /* file's size                          */
  35.    char     name[13];          /* filename followed by 0 byte          */
  36.   };
  37.  
  38. /* Used in dos_findfirst & dos_findnext */
  39.  
  40. #define FA_NORMAL       0x00
  41. #define FA_RDONLY    0x01
  42. #define FA_HIDDEN    0x02
  43. #define FA_SYSTEM    0x04
  44. #define FA_LABEL    0x08
  45. #define FA_DIREC    0x10
  46. #define FA_ARCH        0x20
  47.  
  48. #define FP_SEG(fp)    ((unsigned)((unsigned long)(fp) >> 16))
  49. #define FP_OFF(fp)  ((unsigned)((unsigned long)(fp)))
  50.  
  51. #define MK_FP(seg,offset) ((void FAR *)(((unsigned long)(seg)<<16) | (unsigned)(offset)))
  52.  
  53. struct WREGS
  54.    {
  55.     unsigned ax,bx,cx,dx,si,di,cflag,flags;
  56.    };
  57.  
  58. struct BREGS
  59.    {
  60.     unsigned char al,ah,bl,bh,cl,ch,dl,dh;
  61.    };
  62.  
  63. union REGS
  64.    {
  65.     struct WREGS x;
  66.     struct BREGS h;
  67.    };
  68.  
  69. struct SREGS
  70.    {
  71.     unsigned es,cs,ss,ds;
  72.    };
  73.  
  74. extern int errno;
  75.  
  76. #define ENOENT  2
  77. #define ENOTDIR    3
  78. #define EMFILE    4
  79. #define EACCES    5
  80. #define EBADF    6
  81. #define ENOMEM    8
  82. #define EINVAL    22
  83. #define EEXIST    80
  84.  
  85. #define E2BIG    1000
  86. #define ENOEXEC    1001
  87. #define EDOM    1002
  88. #define    ERANGE    1003
  89.  
  90. #define O_RDONLY        0
  91. #define O_WRONLY    1
  92. #define O_RDWR        2
  93.  
  94. #define O_APPEND    8
  95. #define O_NOINHERIT    0x80
  96. #define O_CREAT        0x100
  97. #define O_TRUNC        0x200
  98. #define O_EXCL    0x400
  99.  
  100. #define S_IREAD 0x0100
  101. #define S_IWRITE 0x0080
  102.  
  103. #define O_BINARY        0
  104.  
  105. #define F_OK    0       /* does file exist?     */
  106. #define X_OK    1    /* execute permission?    */
  107. #define W_OK    2    /* write permission?    */
  108. #define R_OK    4    /* read permission?    */
  109.  
  110. #define SEEK_SET    0    /* seek from start of file    */
  111. #define SEEK_CUR    1    /* relative to current position    */
  112. #define SEEK_END    2    /* relative to end of file    */
  113.  
  114. #define CLOCKS_PER_SEC    ((clock_t) 100)    /* (clock_t / CLOCKS_PER_SEC) == seconds */
  115. #define CLK_TCK    ((clock_t) 100)    /* (clock_t / CLK_TCK) == seconds    */
  116.  
  117. struct tm
  118.   {
  119.    int tm_sec,         /* seconds 0..59                        */
  120.        tm_min,         /* minutes 0..59                        */
  121.        tm_hour,        /* hour of day 0..23                    */
  122.        tm_mday,        /* day of month 1..31                   */
  123.        tm_mon,         /* month 0..11                          */
  124.        tm_year,        /* years since 1900                     */
  125.        tm_wday,        /* day of week, 0..6 (Sunday..Saturday) */
  126.        tm_yday,        /* day of year, 0..365                  */
  127.        tm_isdst;       /* >0 if daylight savings time          */
  128.                        /* ==0 if not DST                       */
  129.                        /* <0 if don't know                     */
  130.   };
  131.  
  132. FILE *  fopen(const char *,const char *);
  133. FILE *  freopen(const char *,const char *,FILE *);
  134. int     fseek(FILE *,long,int);
  135. long    ftell(FILE *);
  136. char *  fgets(char *,int,FILE *);
  137. int     fgetc(FILE *);
  138. int     fflush(FILE *);
  139. int     fclose(FILE *);
  140. int     fputs(const char *,FILE *);
  141. int     getc(FILE *);
  142. int     getchar(void);
  143. char *  gets(char *);
  144. int     fputc(int,FILE *);
  145. int     putc(int,FILE *);
  146. int     putchar(int);
  147. int     puts(const char *);
  148. size_t  fread(void *,size_t,size_t,FILE *);
  149. size_t  fwrite(const void *,size_t,size_t,FILE *);
  150. int     printf(const char *,...);
  151. int     fprintf(FILE *,const char *,...);
  152. int     vfprintf(FILE *,const char *,va_list);
  153. int     vprintf(const char *,va_list);
  154. int     sprintf(char *,const char *,...);
  155. int     vsprintf(char *,const char *,va_list);
  156. void    setbuf(FILE *,char *);
  157. int     setvbuf(FILE *,char *,int,size_t);
  158. int     remove(const char *);
  159. int     rename(const char *,const char *);
  160. void    rewind(FILE *);
  161. void    clearerr(FILE *);
  162. int     feof(FILE *);
  163.  
  164. int     isalnum(int);
  165. int     isalpha(int);
  166. int     iscntrl(int);
  167. int     isdigit(int);
  168. int     isgraph(int);
  169. int     islower(int);
  170. int     isprint(int);
  171. int     ispunct(int);
  172. int     isspace(int);
  173. int     isupper(int);
  174. int     isxdigit(int);
  175. int     toupper(int);
  176. int     tolower(int);
  177.  
  178. int     int86(int,union REGS *,union REGS *);
  179. int     int86x(int,union REGS *,union REGS *,struct SREGS *);
  180. int     intdos(union REGS *,union REGS *);
  181. int     intdosx(union REGS *,union REGS *,struct SREGS *);
  182. int     dos_findfirst(const char *, unsigned, struct find_t *);
  183. int     dos_findnext(struct find_t *);
  184.  
  185. int     read(int,void *,unsigned);
  186. int     write(int,const void *,unsigned);
  187. int     open(const char *,int);
  188. int     creat(const char *,int);
  189. int     close(int);
  190. int     unlink(const char *);
  191. int     chsize(int, long);
  192. int     dup(int);
  193. int     dup2(int, int);
  194. long    lseek(int,long,int);
  195. int     access(const char *,int);
  196. long    filesize(const char *);
  197. long    filelength(int);
  198. int     isatty(int);
  199.  
  200. int     atoi(const char *);
  201. long    atol(const char *);
  202. long    strtol(const char *,char **,int);
  203. int     rand(void);
  204. void    srand(unsigned);
  205. void *  calloc(size_t,size_t);
  206. void    free(void *);
  207. void *  malloc(size_t);
  208. void *  realloc(void *,size_t);
  209. char *  getenv(const char *);
  210. void *  bsearch(const void *,const void *,size_t,size_t,int (FAR *)(const void *,const void *));
  211. void    qsort(void *,size_t,size_t,int (FAR *)(const void *,const void *));
  212. int     abs(int);
  213. long    labs(long);
  214.  
  215. void *  memcpy(void *,const void *,size_t);
  216. void *  memmove(void *,const void *,size_t);
  217. char *  strcpy(char *,const char *);
  218. char *  strncpy(char *,const char *,size_t);
  219. char *  strcat(char *,const char *);
  220. char *  strncat(char *,const char *,size_t);
  221. int     memcmp(const void *,const void *,size_t);
  222. int     strcmp(const char *,const char *);
  223. int     strncmp(const char *,const char *,size_t);
  224. void *  memchr(const void *,int,size_t);
  225. char *  strchr(const char *,int);
  226. size_t  strcspn(const char *,const char *);
  227. char *  strpbrk(const char *,const char *);
  228. char *  strrchr(const char *,int);
  229. size_t  strspn(const char *,const char *);
  230. char *  strstr(const char *,const char *);
  231. char *  strtok(char *,const char *);
  232. void *  memset(void *,int,size_t);
  233. size_t  strlen(const char *);
  234.  
  235. int     memicmp(const void *,const void *,size_t);
  236. char *  stpcpy(char *,const char *);
  237. int     strcmpl(const char *,const char *);
  238. int     strnicmp(const char *,const char *, size_t);
  239. char *  strdup(const char *);
  240. char *  strlwr(char *);
  241. char *  strupr(char *);
  242. char *  strnset(char *,int,size_t);
  243. char *  strrev(char *);
  244. char *  strset(char *,int);
  245. void    swab(char *,char *,size_t);
  246.  
  247. #define strncmpl(a,b,c) strnicmp((a),(b),(c))
  248. #define stricmp(a,b)    strcmpl((a),(b))
  249.  
  250. clock_t clock(void);
  251. time_t  time(time_t *);
  252. time_t  mktime(struct tm *);
  253. char *  asctime(const struct tm *);
  254. char *  ctime(time_t *);
  255. struct tm * localtime(const time_t *);
  256. struct tm * gmtime(const time_t *);
  257. size_t  strftime(char *,size_t,const char *,struct tm *);
  258.  
  259. #define difftime(t1,t2)   (((time_t)(t1) - (time_t)(t2)))
  260.  
  261. void sleep(time_t);
  262. void usleep(unsigned long);
  263. void msleep(unsigned long);
  264.  
  265. /* ------------------------------------------------------------------------- */
  266. /* ------ END OF STANDARD LIBRARY SECTION ---------------------------------- */
  267. /* ------------------------------------------------------------------------- */
  268.  
  269. /*****************************************************************************/
  270. /****  ProBoard speicific #defines and structures  ***************************/
  271. /*****************************************************************************/
  272.  
  273. typedef unsigned KEY;
  274. typedef unsigned char bool;
  275. typedef unsigned char byte;
  276.  
  277. /* Modes for pb_input() */
  278. #define INPUT_ALL       0
  279. #define INPUT_UPFIRST   1
  280. #define INPUT_UPALL     2
  281. #define INPUT_DIGITS    3
  282. #define INPUT_NOFIELD 128
  283.  
  284. /* Paramaters for SetColor() */
  285. #define BLACK   0x00
  286. #define RED     0x01
  287. #define GREEN   0x02
  288. #define YELLOW  0x03
  289. #define MAGENTA 0x04
  290. #define BLUE    0x05
  291. #define CYAN    0x06
  292. #define WHITE   0x07
  293.  
  294. #define BLINK   0x10   /* OR together for flashing colors      */
  295.  
  296.  
  297. /* Used for MenuFunction() */
  298. #define MENU_SHOWANSASC         05
  299. #define MENU_COUNTRY_CHANGE     06
  300. #define MENU_SHELL              07
  301. #define MENU_VERSION_INFO       08
  302. #define MENU_LOGOFF             09
  303. #define MENU_USAGE_GRAPH        10
  304. #define MENU_PAGESYSOP          11
  305. #define MENU_QUESTIONNAIRE      12
  306. #define MENU_USER_LIST          13
  307. #define MENU_TIME_STAT          14
  308. #define MENU_VIEW_ANS_WAIT      15
  309. #define MENU_CITY_CHANGE        16
  310. #define MENU_PASSWORD_CHANGE    17
  311. #define MENU_LINES_CHANGE       18
  312. #define MENU_CLS_TOGGLE         19
  313. #define MENU_PAUSE_TOGGLE       20
  314. #define MENU_ANSI_TOGGLE        21
  315. #define MENU_MAILCHECK          22
  316. #define MENU_READMSG            23
  317. #define MENU_SCAN_MSG           24
  318. #define MENU_QSCAN_MSG          25
  319. #define MENU_DAYS_GRAPH         26
  320. #define MENU_WRITEMSG           27
  321. #define MENU_COMBINED_SELECT    28
  322. #define MENU_WEEKS_GRAPH        29
  323. #define MENU_RAW_DIR            30
  324. #define MENU_LIST_FILES         31
  325. #define MENU_DOWNLOAD           32
  326. #define MENU_UPLOAD             33
  327. #define MENU_LIST_ARCHIVE       34
  328. #define MENU_KEYWORD_SEARCH     35
  329. #define MENU_FILENAME_SEARCH    36
  330. #define MENU_NEW_FILES          37
  331. #define MENU_VIEW_FILE          38
  332. #define MENU_VIEW_NAMED_FILE    39
  333. #define MENU_NOFUNCTION         40
  334. #define MENU_FSED_TOGGLE        41
  335. #define MENU_HOTKEY_TOGGLE      42
  336. #define MENU_CLEARMARKED        43
  337. #define MENU_COMBINED_CLEAR     44
  338. #define MENU_VIEW_FILE_WAIT     45
  339. #define MENU_CHANGE_ACCESS      46
  340. #define MENU_LOGENTRY           47
  341. #define MENU_TOPS               48
  342. #define MENU_SET_MSGAREA        49
  343. #define MENU_SHOW_USERS_ONLINE  50
  344. #define MENU_LASTCALLERS        51
  345. #define MENU_USEREDITOR         52
  346. #define MENU_MULTICHAT          53
  347. #define MENU_SET_FILEAREA       54
  348. #define MENU_VIEW_GIF           55
  349. #define MENU_IBM_TOGGLE         56
  350. #define MENU_PHONE_CHANGE       57
  351. #define MENU_DATAPHONE_CHANGE   58
  352. #define MENU_HANDLE_CHANGE      59
  353. #define MENU_RUN_SDKFILE        60
  354.  
  355. /* Handler modes */
  356. #define HANDLER_SYSOPKEY         6
  357.  
  358. #define HANDLED     1
  359. #define NOT_HANDLED 0
  360.  
  361. /* Loglevels */
  362. #define LOG_FRIEND     0
  363. #define LOG_NORMAL     1
  364. #define LOG_SUSPICIOUS 2
  365. #define LOG_DANGEROUS  3
  366.  
  367. /**** KEY scan codes ****/
  368. #define KEY_F1   0x3B00U
  369. #define KEY_F2   0x3C00U
  370. #define KEY_F3   0x3D00U
  371. #define KEY_F4   0x3E00U
  372. #define KEY_F5   0x3F00U
  373. #define KEY_F6   0x4000U
  374. #define KEY_F7   0x4100U
  375. #define KEY_F8   0x4200U
  376. #define KEY_F9   0x4300U
  377. #define KEY_F10  0x4400U
  378.  
  379. #define KEY_SF1   0x5400U
  380. #define KEY_SF2   0x5500U
  381. #define KEY_SF3   0x5600U
  382. #define KEY_SF4   0x5700U
  383. #define KEY_SF5   0x5800U
  384. #define KEY_SF6   0x5900U
  385. #define KEY_SF7   0x5A00U
  386. #define KEY_SF8   0x5B00U
  387. #define KEY_SF9   0x5C00U
  388. #define KEY_SF10  0x5D00U
  389.  
  390. #define KEY_CF1   0x5E00U
  391. #define KEY_CF2   0x5F00U
  392. #define KEY_CF3   0x6000U
  393. #define KEY_CF4   0x6100U
  394. #define KEY_CF5   0x6200U
  395. #define KEY_CF6   0x6300U
  396. #define KEY_CF7   0x6400U
  397. #define KEY_CF8   0x6500U
  398. #define KEY_CF9   0x6600U
  399. #define KEY_CF10  0x6700U
  400.  
  401. #define KEY_AF1   0x6800U
  402. #define KEY_AF2   0x6900U
  403. #define KEY_AF3   0x6A00U
  404. #define KEY_AF4   0x6B00U
  405. #define KEY_AF5   0x6C00U
  406. #define KEY_AF6   0x6D00U
  407. #define KEY_AF7   0x6E00U
  408. #define KEY_AF8   0x6F00U
  409. #define KEY_AF9   0x7000U
  410. #define KEY_AF10  0x7100U
  411.  
  412. #define KEY_ALT1 0x7800U
  413. #define KEY_ALT2 0x7900U
  414. #define KEY_ALT3 0x7A00U
  415. #define KEY_ALT4 0x7B00U
  416. #define KEY_ALT5 0x7C00U
  417. #define KEY_ALT6 0x7D00U
  418. #define KEY_ALT7 0x7E00U
  419. #define KEY_ALT8 0x7F00U
  420. #define KEY_ALT9 0x8000U
  421. #define KEY_ALT0 0x8100U
  422.  
  423. #define KEY_ALTA 0x1E00U
  424. #define KEY_ALTB 0x3000U
  425. #define KEY_ALTC 0x2E00U
  426. #define KEY_ALTD 0x2000U
  427. #define KEY_ALTE 0x1200U
  428. #define KEY_ALTF 0x2100U
  429. #define KEY_ALTG 0x2200U
  430. #define KEY_ALTH 0x2300U
  431. #define KEY_ALTI 0x1700U
  432. #define KEY_ALTJ 0x2400U
  433. #define KEY_ALTK 0x2500U
  434. #define KEY_ALTL 0x2600U
  435. #define KEY_ALTM 0x3200U
  436. #define KEY_ALTN 0x3100U
  437. #define KEY_ALTO 0x1800U
  438. #define KEY_ALTP 0x1900U
  439. #define KEY_ALTQ 0x1000U
  440. #define KEY_ALTR 0x1300U
  441. #define KEY_ALTS 0x1F00U
  442. #define KEY_ALTT 0x1400U
  443. #define KEY_ALTU 0x1600U
  444. #define KEY_ALTV 0x2F00U
  445. #define KEY_ALTW 0x1100U
  446. #define KEY_ALTX 0x2D00U
  447. #define KEY_ALTY 0x1500U
  448. #define KEY_ALTZ 0x2C00U
  449.  
  450. #define KEY_CTLA 0x0001U
  451. #define KEY_CTLB 0x0002U
  452. #define KEY_CTLC 0x0003U
  453. #define KEY_CTLD 0x0004U
  454. #define KEY_CTLE 0x0005U
  455. #define KEY_CTLF 0x0006U
  456. #define KEY_CTLG 0x0007U
  457. #define KEY_CTLH 0x0008U
  458. #define KEY_CTLI 0x0009U
  459. #define KEY_CTLJ 0x000AU
  460. #define KEY_CTLK 0x000BU
  461. #define KEY_CTLL 0x000CU
  462. #define KEY_CTLM 0x000DU
  463. #define KEY_CTLN 0x000EU
  464. #define KEY_CTLO 0x000FU
  465. #define KEY_CTLP 0x0010U
  466. #define KEY_CTLQ 0x0011U
  467. #define KEY_CTLR 0x0012U
  468. #define KEY_CTLS 0x0013U
  469. #define KEY_CTLT 0x0014U
  470. #define KEY_CTLU 0x0015U
  471. #define KEY_CTLV 0x0016U
  472. #define KEY_CTLW 0x0017U
  473. #define KEY_CTLX 0x0018U
  474. #define KEY_CTLY 0x0019U
  475. #define KEY_CTLZ 0x001AU
  476.  
  477. #define KEY_DEL  0x5300U
  478. #define KEY_INS  0x5200U
  479. #define KEY_HOME 0x4700U
  480. #define KEY_END  0x4F00U
  481.  
  482. #define KEY_PGUP 0x4900U
  483. #define KEY_PGDN 0x5100U
  484. #define KEY_UP   0x4800U
  485. #define KEY_DN   0x5000U
  486. #define KEY_LT   0x4B00U
  487. #define KEY_RT   0x4D00U
  488.  
  489. #define KEY_ESC  0x001BU
  490. #define KEY_ENT  0x000DU
  491. #define KEY_RET  0x000DU
  492. #define KEY_TAB  0x0009U
  493. #define KEY_STAB 0x0F00U
  494. #define KEY_CPGUP 0x8400U
  495. #define KEY_CPGDN 0x7600U
  496.  
  497.  
  498. /** User flags *******************************************************/
  499. #define UFLAG_DELETED    1    /* User deleted                        */
  500. #define UFLAG_ANSI       2    /* ANSI mode ON                        */
  501. #define UFLAG_PAUSE      4    /* Pause mode ON                       */
  502. #define UFLAG_CLEAR      8    /* Screenclear mode ON                 */
  503. #define UFLAG_STACKING  16    /* Command stacking?                   */
  504. #define UFLAG_NOIBM     32    /* User has no IBM-graphics            */
  505. #define UFLAG_FSED      64    /* Fullscreen editor used              */
  506. #define UFLAG_NOKILL   128    /* Do not kill user                    */
  507. #define UFLAG_IGNORE   256    /* Ignore DL-hours                     */
  508. #define UFLAG_ATTEN    512    /* Attention flag                      */
  509. #define UFLAG_NOTOPS  1024    /* Don't appear in tops                */
  510.  
  511. #define MSG_LOCAL   0
  512. #define MSG_NET     1
  513. #define MSG_ECHO    2
  514. #define MSG_PVTECHO 3
  515.  
  516. #define MA_DELETED       1
  517. #define MA_PVT           8
  518. #define MA_RECEIVED     16
  519.  
  520. #define NET_KILL         1
  521. #define NET_SENT         2
  522. #define NET_ATTACH       4
  523. #define NET_CRASH        8
  524.  
  525.  
  526. /**** NOTE *******************************************************************/
  527. /*                                                                           */
  528. /*  Dates are stored as an array of 3 bytes, the first byte is the day       */
  529. /*  portion, the second byte is the month portion, and the third byte is the */
  530. /*  year portion (00-99). Times are stored in a similar way: the first byte  */
  531. /*  is the hour portion (00-24), the second byte is the minute portion       */
  532. /*  (00-59), and the third byte is the seconds portion (00-59).              */
  533. /*                                                                           */
  534. /*****************************************************************************/
  535.  
  536. typedef struct
  537.   {
  538.    char name[36];            /* User name                            */
  539.    char password[16];        /* Password                             */
  540.    unsigned level;           /* Security level                       */
  541.    char extra1[16];
  542.    char country[16];         /* Country                              */
  543.    byte birthday[3];         /* Birthday                             */
  544.    char phone[16];           /* Telephone number                     */
  545.    unsigned timescalled;     /* # times called                       */
  546.    int timeused;             /* time used today                      */
  547.    unsigned numdownloads;    /* # downloads                          */
  548.    unsigned kdownloaded;     /* K downloaded                         */
  549.    unsigned numuploads;      /* # downloads                          */
  550.    unsigned kuploaded;       /* K downloaded                         */
  551.    unsigned messposted;      /* # messages posted                    */
  552.    byte lastdate[3];         /* Date last called                     */
  553.    byte lasttime[3];         /* Time last called                     */
  554.    unsigned long aflags;     /* Access flags                         */
  555.    byte boards[25];          /* Boards connected to (200 bits)       */
  556.    char extra2[7];           /*                                      */
  557.    int screenlines;          /* # of lines                           */
  558.    unsigned uflags;          /* User flags (DELETED//PAUSE/...)      */
  559.    int loglevel;             /* Loglevel                             */
  560.    unsigned lastread[200];   /* Lastread pointers                    */
  561.    long totaltimeused;       /* Total time used (minutes)            */
  562.    byte expir[3];            /* Expiration date                      */
  563.    int expirlevel;           /* Fallback level after expiration      */
  564.    char dataphone[16];       /* Data phone #                         */
  565.    char alias[36];           /* Fixed alias                          */
  566.    char city[36];            /* City                                 */
  567.    byte firstdate[3];        /* First login date                     */
  568.    char extra3[10];
  569.    unsigned todayk;          /* Kb downloaded today                  */
  570.    unsigned credit;          /* Netmail credit                       */
  571.    int lastfilearea;         /* Last file area accessed              */
  572.    int lastmsgarea;          /* Last msg area accessed               */
  573.    char extra4[2];
  574.    char comment[81];         /* Comment                              */
  575.    char extra5[232];
  576.   } USER_REC;
  577.  
  578. typedef struct
  579.   {
  580.    int      level;            /* User Level                            */
  581.    int      timelimit;        /* Time Limit                            */
  582.    int      daily_klimit;     /* Daily download limit                  */
  583.    int      pre_download;     /* Pre-download time limit               */
  584.    char     id[6];            /* Usergroup ID                          */
  585.    unsigned free;             /* Free upload in Kb.                    */
  586.    byte     factor;           /* Percentage upload required            */
  587.    unsigned max_download;     /* Max download for this level           */
  588.    int      fallto;           /* Fall to level x when max. reached     */
  589.    int      msgfactor;        /* # Kbytes granted per message written  */
  590.    char extra[5];
  591.  } LIMIT;
  592.  
  593. typedef struct
  594.   {
  595.    char name[31];             /* Name of message areas                       */
  596.    char msgtype;              /* Type of messages (Net/Echo/Local)           */
  597.    char msgkind;              /* Kind of messages (Private/Public/...)       */
  598.    char writemode;            /* Msg write mode allowed (Alias/Real Name/...)*/
  599.    int readlevel;             /* Minimum level needed to read msgs           */
  600.    long readflags;            /* flags needed to read msgs                   */
  601.    int writelevel;            /* Minimum level needed to write msgs          */
  602.    long writeflags;           /* flags needed to write msgs                  */
  603.    int sysoplevel;            /* Minimum level needed to change msgs         */
  604.    long sysopflags;           /* flags needed to change msgs                 */
  605.  
  606.    char origin[62];           /* Origin line                                 */
  607.    int aka;                   /* AKA                                         */
  608.  
  609.    int rcv_kill_days;         /* Delete received messages after xx days      */
  610.    int msg_kill_days;         /* Delete all messages after xx days           */
  611.    int max_msgs;              /* Max. # messages in this area                */
  612.   } MSGAREA;
  613.  
  614. typedef struct
  615.   {
  616.    char name[80];             /* Name of file area                           */
  617.    char listpath[80];         /* Path for file-list                          */
  618.    char filepath[80];         /* Path for files                              */
  619.    int level;                 /* Level needed to access file area            */
  620.    long flags;                /* Flags needed to access file area            */
  621.    bool cdrom;                /* 1 = CDROM File listing type                 */
  622.    int maxfiles;              /* Max files per day in this area downloadable */
  623.    int maxkb;                 /* Max Kbytes per day in this area             */
  624.  
  625.    char extra[15];
  626.   } FILEAREA;
  627.  
  628. typedef struct
  629.   {
  630.    unsigned prevmsg;  /* Previous message in reply chain  */
  631.    unsigned nextmsg;  /* Next message in reply chain      */
  632.    byte postdate[3];  /* Date posted                      */
  633.    byte posttime[3];  /* Time posted                      */
  634.    byte recvdate[3];  /* Date received                    */
  635.    byte recvtime[3];  /* Time received                    */
  636.    int  reserved1[2];
  637.    int cost;
  638.    unsigned msgnum;   /* message number                   */
  639.    byte area;         /* area number                      */
  640.    char from[36];     /* From                             */
  641.    char to[36];       /* To                               */
  642.    char subj[66];     /* Subject                          */
  643.    byte msgflags;     /* Message flags                    */
  644.    byte netflags;     /* Netmail flags                    */
  645.    int orgzone,       /* Origin zone                      */
  646.        orgnet,        /* Origin net                       */
  647.        orgnode,       /* Origin node                      */
  648.        destzone,      /* Destination zone                 */
  649.        destnet,       /* Destination net                  */
  650.        destnode;      /* Destination node                 */
  651.    int reserved2;
  652.   } MESSAGE;
  653.  
  654. typedef struct
  655.   {
  656.    unsigned zone;
  657.    unsigned net;
  658.    unsigned node;
  659.    unsigned point;
  660.   } FIDO_NODE;
  661.  
  662. typedef struct
  663.   {
  664.    char shellmsg[81];         /* Message to show when shelling               */
  665.    char sysopname[36];        /* Name of sysop                               */
  666.    char txtpath[61];          /* Path for textfiles                          */
  667.    char mnupath[61];          /* Path for menu-files                         */
  668.    char msgpath[61];          /* Path for message base                       */
  669.    char uploadpath[61];       /* Uploadpath                                  */
  670.    char editorname[61];       /* Name of external editor                     */
  671.    int newuserlevel;          /* Level for new user                          */
  672.    int newuserloglevel;       /* Loglevel for new user                       */
  673.    long newuserflags;         /* New user flags                              */
  674.    int max_passinput;         /* Maximum attempts for password entry         */
  675.    int min_passlength;        /* Minimum password length                     */
  676.    int inactivity_time;       /* Inactivity time-out limit                   */
  677.    int max_sysop_pages;       /* Maximum times sysop can be paged            */
  678.    int pagebell_length;       /* Length of page-bell (secs)                  */
  679.    int mailcheck;             /* Check for mail at logon?                    */
  680.    int europe;                /* European date format?                       */
  681.    int numnodes;              /* # nodes                                     */
  682.    int allowansi;             /* Allow ANSI?                                 */
  683.    int discrete;              /* Hide sysop activity?                        */
  684.    int askphone;              /* Ask for phone number?                       */
  685.    int allowoneword;          /* Allow one-word names                        */
  686.    int crashlevel;            /* Level needed for crashmail                  */
  687.    long crashflags;           /* Flags needed for crashmail                  */
  688.    int attachlevel;           /* Level needed for file attach                */
  689.    long attachflags;          /* Flags needed for file attach                */
  690.    int allowmsgupload;        /* Allow message uploads                       */
  691.    int allowstacking;         /* Allow command stacking                      */
  692.    byte page_start[3];        /* Paging hours start                          */
  693.    byte page_end[3];          /* Paging hours end                            */
  694.    int handshaking;           /* I/O Handshaking                             */
  695.    int allowalias;            /* Allow alias for login                       */
  696.    int loglocal;              /* Log local calls                             */
  697.    int doswap;                /* Allow swapping                              */
  698.    char originline[61];       /* Origin line                                 */
  699.    char nodelistdir[61];      /* Nodelist directory                          */
  700.    char sysopkeys[10][60];    /* Sysop hotkeys                               */
  701.    byte dl_start[3];          /* Download hours start                        */
  702.    byte dl_end[3];            /* Download hours end                          */
  703.    int uploadspace;           /* Space needed for uploads                    */
  704.    char pvtuploadpath[61];    /* Directory for files uploads                 */
  705.    char quotestring[6];       /* String used for quoting                     */
  706.    int fastmode;              /* Use fast mode (=needs more memory)          */
  707.    int killsent;              /* Kill netmail after sent                     */
  708.    bool egamode;              /* Use 43/50 line mode                         */
  709.    bool showuserinfo;         /* Show user info while in EGA mode?           */
  710.    char pexpath[61];          /* Directory for PEX-files                     */
  711.    int allowquicklogin;       /* Allow quick sysop login?                    */
  712.    int securityboard;         /* MsgBoard for security messages              */
  713.    int pwdmessages;           /* Write security-messages?                    */
  714.    char extra[646];
  715.   } CONFIG;
  716.  
  717. /*****************************************************************************/
  718. /****  Global ProBoard variables  ********************************************/
  719. /*****************************************************************************/
  720.  
  721. #define GetFlag(flags,flag)   (((flags) &   l_shl(1,31-toupper(flag)+'A'))?1:0)
  722. #define SetFlag(flags,flag)   { (flags) |=  l_shl(1,31-toupper(flag)+'A'); }
  723. #define ClearFlag(flags,flag) { (flags) &= ~l_shl(1,31-toupper(flag)+'A'); }
  724.  
  725. extern USER_REC     * const CurUser;      /* Current user online        (R/W) */
  726. extern int            const UserRecNr;    /* Record # of current user   (R/O) */
  727. extern int            const NumLimits;    /* # limits in limits[] array (R/O) */
  728. extern LIMIT  const * const Limits;       /* Limits per level           (R/O) */
  729. extern char         * const LoginDate;    /* Login date of user         (R/W) */
  730. extern char         * const LoginTime;    /* Login time of user         (R/W) */
  731. extern bool           const NetEntered;   /* Netmail entered            (R/W) */
  732. extern bool           const EchoEntered;  /* Echomail entered           (R/W) */
  733. extern int            const NumUsers;     /* # users in userfile        (R/O) */
  734. extern int            const NodeNumber;   /* Current node number        (R/O) */
  735. extern char   const * const CurMenu;      /* Current menu name          (R/O) */
  736. extern char   const * const UserFirstName;/* First name of current user (R/O) */
  737. extern char   const * const PrevUser;     /* Name of previous user      (R/O) */
  738. extern char   const * const StartupPath;  /* Startup path               (R/O) */
  739. extern char   const * const SysPath;      /* ProBoard system path       (R/O) */
  740. extern CONFIG const * const Config;       /* ProBoard config-record     (R/O) */
  741.  
  742. /***** Long math substitution functions *****/
  743.  
  744. long l_mul(long val1,long val2);
  745. long l_div(long val1,long val2);
  746. long l_mod(long val1,long val2);
  747. long l_shl(long val,unsigned s);
  748. long l_shr(long val,unsigned s);
  749.  
  750. unsigned long ul_div(unsigned long val1,unsigned long val2);
  751. unsigned long ul_mod(unsigned long val1,unsigned long val2);
  752. unsigned long ul_shl(unsigned long val,unsigned s);
  753. unsigned long ul_shr(unsigned long val,unsigned s);
  754.  
  755. char *form(char *, ...);                         /* From old C++ streams lib */
  756.  
  757.  
  758. /*****************************************************************************/
  759. /****  Message functions  ****************************************************/
  760. /*****************************************************************************/
  761.  
  762. void MsgEd(void);
  763. int  PostMessage(const char *from,const char *to,const char *subject,int area,bool pvt);
  764. int  PostNetmail(const char *from,const char *to,const char *subject,int area,const FIDO_NODE *address,bool attach,bool crash,bool kill);
  765. int  ReadMsgArea(int area,MSGAREA *ma);
  766. int  ReadMessage(MESSAGE *msg,int msgnum);
  767. void WriteMSGTMP(const char *text);
  768. void AppendMSGTMP(const char *text);
  769. void ShowMessage(const MESSAGE *msg);
  770. void CreateMessageText(const MESSAGE *msg);
  771. int  FirstMessage(MESSAGE *msg,int area,int order,int first);
  772. int  NextMessage(MESSAGE *msg,int area,int order);
  773. int  DeleteMessage(MESSAGE *msg);
  774. void MarkMessage(int msgnum);
  775. void ReadMarkedMessages(void);
  776. void ListMarkedMessages(void);
  777. void UnMarkAllMessages(void);
  778.  
  779.  
  780. /*****************************************************************************/
  781. /****  Time functions  *******************************************************/
  782. /*****************************************************************************/
  783.  
  784. void AddTime(int plusminus);
  785. int  TimeLeft(void);
  786. int  TimeOnline(void);
  787. void SuspendTimer(void);
  788. void RestartTimer(void);
  789. void AdjustTime(void);
  790.  
  791.  
  792. /*****************************************************************************/
  793. /****  Low-level I/O functions  **********************************************/
  794. /*****************************************************************************/
  795.  
  796. bool IO_SendByte(byte);         /* TRUE = byte sent, FALSE = buffer full */
  797. int  IO_ReadByte(void);         /* Returns -1 if no byte available       */
  798. bool IO_Carrier(void);          /* TRUE = carrier available              */
  799. bool IO_ByteReady(void);        /* TRUE = byte available in input buffer */
  800. bool IO_BufEmpty(void);         /* TRUE = output buffer is empty         */
  801. void IO_StartBreak(void);       /* Start sending a break                 */
  802. void IO_StopBreak(void);        /* Stop sending a break                  */
  803. void IO_DTR(bool);              /* Set/lower DTR line (TRUE = set)       */
  804.  
  805. /*****************************************************************************/
  806. /****  I/O functions  ********************************************************/
  807. /*****************************************************************************/
  808. /* Note : some I/O is done through the standard library functions printf(),
  809.  *        puts(), putchar(), getchar(), gets() and vprintf()
  810.  *****************************************************************************/
  811.  
  812. char WaitKey(void);
  813. char WaitKeys(const char *);
  814. void Input(char *buf,int len,int readmode);
  815. bool Ask(bool def);
  816. char PeekChar(void);
  817. void SetColor(char color);
  818. void EnableStop(void);
  819. void DisableStop(void);
  820. bool Stopped(void);
  821. char ShowHotkeyFile(const char *fname,const char *hotkeys);
  822. char ShowHotkeyANSIFile(const char *fname,const char *hotkeys);
  823. void InitLineCounter();
  824. bool LineCounter();
  825.  
  826. int  ReadUser(USER_REC *rec,int recnr);
  827. void WriteUser(const USER_REC *rec,int recnr);
  828. char PlayMusic(const char *fname,const char *hotkeys);
  829. void PostInfo(const char *fname);
  830. int  ReadFileArea(int area,FILEAREA *ma);
  831. long MemAvail(void);
  832. void MenuFunction(int,const char *);
  833. void Log(int loglevel,const char *fmtstring,...);
  834. void HangUp(void);
  835. bool CheckAccess(int level,long flags);
  836. KEY  ScanKey(void);
  837. void exit(void);
  838. void ExitTSR(void);
  839.  
  840. int  _InstallHandler(int handler,void (*func)(void),unsigned ds);
  841. #define InstallHandler(handler,func) _InstallHandler(handler,(void (*)(void))(func),FP_SEG(&NetEntered));
  842.  
  843. #ifdef __cplusplus
  844.  }
  845.  
  846. inline void * operator new   (unsigned size)    { return malloc(size); }
  847. inline void   operator delete(void *p)          { free(p); }
  848. inline void   operator delete(void *p,unsigned) { free(p); }
  849.  
  850. #endif
  851.